home *** CD-ROM | disk | FTP | other *** search
/ Aminet 7 / Aminet 7 - August 1995.iso / Aminet / comm / mebbs / nimrod.lha / NIMROD / NimRod.REXX < prev   
OS/2 REXX Batch file  |  1994-05-30  |  8KB  |  253 lines

  1. /*  NimRod v1.0 original by D.F. Duck 29-Mar-90 */
  2. /* Converted for Starnet use by Allan Antoszewski 16-Nov-91 */
  3. /* re-written and improved by */
  4. /* Robert Lehman of Southwinds bbs for mebbsnet >1.5x */
  5. /* May 30th 1994, (219) 289-3275 Vfast 28.8 Maxnet International 90:91/0 */
  6. /* Mebbs developers #M3005  */
  7.  
  8. SIGNAL ON ERROR
  9. SIGNAL ON SYNTAX
  10. SIGNAL ON IOERR
  11. SIGNAL ON FAILURE
  12.  
  13. parse arg LineNumber
  14.  
  15. OPTIONS RESULTS
  16.  
  17. DoorName = "Nimrod"
  18.  
  19. if( ~show( 'l', "mebbsarexx.library" ) )then do
  20. if( ~addlib( "mebbsarexx.library", 0, -30, 0 ) )then do
  21.       say "Could not open library"
  22.       exit 10
  23.    end
  24. end
  25.  
  26. M=0
  27. E=0
  28. version = 'Version 2.0'
  29. call getvar doorname,linenumber,8
  30. gfx = result
  31. if gfx = 1 then do
  32. CLS = 'H'
  33. HOM = ''
  34. RED = ''
  35. YLW = ''
  36. GRN = ''
  37. CYN = ''
  38. MAG = ''
  39. BLU = ''
  40. GCN = ''
  41. RES = ''
  42. BCK1= '26H'
  43. end
  44. else do
  45. CLS = 'H'
  46. HOM = ''
  47. RED = ''
  48. YLW = ''
  49. GRN = ''
  50. CYN = ''
  51. MAG = ''
  52. BLU = ''
  53. GCN = ''
  54. RES = ''
  55. BCK1= ''
  56. end
  57.     call message doorname,linenumber, CLS,1
  58.     call message doorname,linenumber, ' ',1
  59.     Call prompt doorname,linenumber, CYN' Do you need instructions (Y/N)? ',2
  60. Inst=upper(result)
  61.  if Inst='Y' then do
  62. call Docs
  63. call checkca
  64. end
  65.     call message doorname,linenumber, CLS GRN'             ___',1
  66.     call message doorname,linenumber, '        /| /  /_/',1
  67.     call message doorname,linenumber, '      _/ |/'RES'IM'GRN'/ |'RES'OD'MAG'    Converted for'GRN' Mebbsnet use'MAG' by'CYN' Robert Lehman',1
  68.     call message doorname,linenumber, MAG'                                 SouthWinds bbs'GRN' (219)-289-3275',1
  69.     call message doorname,linenumber, BLU'       'Version,1
  70.     call message doorname,linenumber, ' ',1
  71.     call message doorname,linenumber, MAG'   Based on the original by 'RED'D.F. Duck'RES,1
  72.  
  73. MakeNum:
  74. Z=RANDOM(1,8,Time(s))
  75. Z=(16+Z)%1
  76.  if 2*(Z/2)=Z then Z=Z+1
  77. call HowMany
  78. return
  79.  
  80. HowMany:
  81. H=RANDOM(1,3,Time(s))
  82.  H=(2+H)%1
  83.  if H>Z then H=Z
  84.  call NimS
  85.     call message doorname,linenumber, ' ',1
  86.     call message doorname,linenumber, 'H'YLW' There are now 'GRN''Z' 'YLW'Nims ',1
  87.     call message doorname,linenumber, ' Maximum to take 'BLU''H,1
  88.     call message doorname,linenumber, ' ',1
  89.  call Take
  90. return
  91.  
  92. Take:
  93.     Call prompt doorname,linenumber, 'H'CYN' How many will you take?   'RES BCK1,1
  94. E=upper(result)
  95.  if E<1 | E>H then call Take
  96.  if E='Q' then signal die
  97. Z=Z-E
  98.  if Z<1 then call Lost
  99. call checkca 
  100. call NimS
  101.     call message doorname,linenumber, 'H'YLW' There are now 'GRN''Z' 'YLW'Nims ',1
  102.     call message doorname,linenumber, ' ',1
  103.     call message doorname,linenumber, 'H'MAG' You took 'YLW''E,1
  104.  call Math
  105.  call Delay
  106.     call message doorname,linenumber, 'H'BLU' NimRod takes 'RED''Q,1
  107.  call Delay
  108. Z=Z-Q
  109.  if Z=0 then call Won
  110.  call HowMany
  111. return
  112.  
  113. Delay:
  114.     do x = 1 to 300
  115.     end
  116. return
  117.  
  118. Math:   /* This is how many NimRod takes each turn */
  119. Q=RANDOM(1,5,Time(s))
  120.    if Q>Z | Q>H then call Math
  121.    if Z=2 then Q=1      /* Give NimRod a little smarts anyway... */
  122.    if Z=3 then Q=2      /* otherwise it`s too easy to always win */
  123.    if Z=4 & H>2 then Q=3
  124.    if Z=5 & H>3 then Q=4
  125.    if Z=6 & H>4 then Q=5
  126.    if Z=7 then Q=1
  127.    if Z=8 then Q=2
  128.    if Z=9 & H>2 then Q=3
  129. return
  130.  
  131. NimS:
  132.  If Z=24 then NS=' O O O O O O O O O O O O O O O O O O O O O O O O'
  133.  If Z=23 then NS=' O O O O O O O O O O O O O O O O O O O O O O O  '
  134.  If Z=22 then NS=' O O O O O O O O O O O O O O O O O O O O O O    '
  135.  If Z=21 then NS=' O O O O O O O O O O O O O O O O O O O O O      '
  136.  If Z=20 then NS=' O O O O O O O O O O O O O O O O O O O O        '
  137.  If Z=19 then NS=' O O O O O O O O O O O O O O O O O O O          '
  138.  If Z=18 then NS=' O O O O O O O O O O O O O O O O O O          '
  139.  If Z=17 then NS=' O O O O O O O O O O O O O O O O O          '
  140.  If Z=16 then NS=' O O O O O O O O O O O O O O O O          '
  141.  If Z=15 then NS=' O O O O O O O O O O O O O O O           '
  142.  if Z=14 then NS=' O O O O O O O O O O O O O O          '
  143.  If Z=13 then NS=' O O O O O O O O O O O O O          '
  144.  If Z=12 then NS=' O O O O O O O O O O O O          '
  145.  If Z=11 then NS=' O O O O O O O O O O O          '
  146.  if Z=10 then NS=' O O O O O O O O O O          '
  147.  If Z=9 then NS=' O O O O O O O O O          '
  148.  If Z=8 then NS=' O O O O O O O O          '
  149.  If Z=7 then NS=' O O O O O O O          '
  150.  If Z=6 then NS=' O O O O O O          '
  151.  If Z=5 then NS=' O O O O O          '
  152.  If Z=4 then NS=' O O O O          '
  153.  If Z=3 then NS=' O O O          '
  154.  If Z=2 then NS=' O O          '
  155.  If Z=1 then NS=' O          '
  156.     call message doorname,linenumber, 'H'RED' 'NS RES,1
  157. return
  158.  
  159. Lost:
  160.     call message doorname,linenumber, 'H     ',1   /* clear remaining Nims */
  161.     call message doorname,linenumber, RED'H You took the last one, so NimRod wins!!',1
  162.     call Again
  163. return
  164.  
  165. Won:
  166.     call message doorname,linenumber, 'H     ',1
  167.     call message doorname,linenumber, GRN'H NimRod took the last 'Q' so YOU WIN!!'RES,1
  168.     call Again
  169. return
  170.  
  171. Again:
  172.     Call prompt doorname,linenumber, YLW' Play NimRod again (Y/N)? > 'RES,2
  173. over=upper(result)
  174.  if over=' ' | over='N' | over='n' then signal Die
  175.  if over='Y' then do
  176.     call checkca
  177.     call message doorname,linenumber, '11H ',1
  178.     call message doorname,linenumber, '15H ',1
  179.     call message doorname,linenumber, 'H                                        ',1
  180.     call message doorname,linenumber, '                             ',1
  181. end 
  182.  call MakeNum
  183. return
  184.  
  185. Docs:
  186.     call message doorname,linenumber, CLS,1
  187.     call message doorname,linenumber, ' ',1
  188.     call message doorname,linenumber, 'NimRod displays an odd number of objects, tells you how many you can take,',1
  189.     call message doorname,linenumber, 'then takes a few itself. This fascinating process continues until there is',1
  190.     call message doorname,linenumber, 'only one left. At this point the player who must take the last one loses.',1
  191.     call message doorname,linenumber, ' ',1
  192.     call message doorname,linenumber, RES'    O'YLW'<   'GRN'Have Funn!',1
  193.     call message doorname,linenumber, RES' *===',1
  194.     call message doorname,linenumber, YLW'  ^'RES,1
  195.     call message doorname,linenumber, ' ',1
  196.     Call hotkey doorname,linenumber, 'Press RETURN'
  197. call checkca
  198. return
  199.  
  200. /* Procedures */
  201.  
  202. CHECKCA:
  203. call cdetect doorname,linenumber
  204. carrier = result
  205. if carrier = "no carrier!" then signal die
  206. return
  207.  
  208.  
  209. IOERR:
  210.  
  211.    call message doorname,linenumber,"",1
  212.    Call message doorname,linenumber, '**ALERT** input output error!',1
  213.    err_line = SIGL ; sev = RC
  214.    Call message doorname,linenumber, 'Line: 'err_line'   Severity: 'sev,1
  215.    call hotkey doorname,linenumber,'Press return...'
  216. call exit_door DoorName,LineNumber
  217. exit 10
  218.  
  219. ERROR:
  220.  
  221.    call message doorname,linenumber,"",1
  222.    Call message doorname,linenumber, '**ALERT** General Error!',1
  223.    err_line = SIGL ; sev = RC
  224.    Call message doorname,linenumber, 'Line: 'err_line'   Severity: 'sev,1
  225.    call hotkey doorname,linenumber,'Press return...'
  226. call exit_door DoorName,LineNumber
  227. exit 10
  228.  
  229. SYNTAX:
  230.  
  231.    Call message doorname,linenumber, '**ALERT** Syntax Error!',1
  232.    err_line = SIGL ; sev = RC
  233.    Call message doorname,linenumber, 'Line: 'err_line'   Severity: 'sev,1
  234.    call hotkey doorname,linenumber,'Press return...'
  235. call exit_door DoorName,LineNumber
  236. exit 10
  237.  
  238.  
  239. FAILURE:
  240.  
  241.    Call message doorname,linenumber, '**ALERT** Failure!',1
  242.    err_line = SIGL ; sev = RC
  243.    Call message doorname,linenumber, 'Line: 'err_line'   Severity: 'sev,1
  244.    call hotkey doorname,linenumber,'Press return...'
  245. call exit_door DoorName,LineNumber
  246. exit 10
  247.  
  248. Die:
  249.     call message doorname,linenumber, ' ',1
  250.     call message doorname,linenumber, 'Exiting...',1
  251. call exit_door DoorName,LineNumber
  252. exit 0
  253.